class User < ApplicationRecord
  has_secure_password

  alias_attribute :rename, :name

  before_create :generate_authentication_token

  def generate_authentication_token
    loop do
      self.authentication_token = SecureRandom.base64(64)
      break if !User.find_by(authentication_token: authentication_token)
    end
  end

  # 增加关联 1对多
  has_many :microposts

  #1.  问号
  #     方法名后面加问号是 Ruby 的编码风格规范，用来表示该方法会返回一个 boolean 类型的值，但是并不会强制该方法一定要返回 boolean 值。
  # 2.  感叹号
  #     方法名后面加感叹号是 Ruby 的编码风格规范，用来表示该方法会去修改对象本身，Ruby 会把带有感叹号的方法称为危险的方法，因为程序中可能有其他地方会引用这个对象。但是并不会强制该方法一定要修改对象本身。
  def reset_auth_token!
    generate_authentication_token
    save
  end

  # 同名字段格式化
  def activated
    super.strftime('%Y-%m-%d %H:%M:%S')
  end

  def created_at
    super.strftime('%Y-%m-%d %H:%M:%S')
  end

  def updated_at
    super.strftime('%Y-%m-%d %H:%M:%S')
  end

  def show_name
    puts "method called for #{object_id}"
  end
end
